﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Com.AlbLab.GEP.Domain;
using common;
using common.pages;
using Com.AlbLab.GEP.Domain.Entities;
using Com.AlbLab.GEP.Domain.Entities.Dataset;

namespace Com.AlbLab.CR.Web.Pratiche
{
    public partial class InvioRisposte : BasePage
    {
        private DS_snd_risposte data_inv_risp;
        private List<GEP_TESTATA> _ListaPratiche;
        const int STATO_chiusa = 20;

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                CaricaListaPratiche();
                Session["ListaDistributori"] = data_inv_risp;
            }
            else
            {
                data_inv_risp = (DS_snd_risposte)Session["ListaDistributori"];
                _ListaPratiche = (List<GEP_TESTATA>)Session["ListaPratiche"];
                hfInviati.Value = "false";
            }
            
        }

        protected override void Page_PreRender(object sender, EventArgs e)
        {
            GrigliaDistributori.NumColonne = 6;
            GrigliaDistributori.H0 = "Codice Contratto Dispacciamento";
            GrigliaDistributori.H1 = "Partita iva mittente";
            GrigliaDistributori.H2 = "Ragione Sociale";
            GrigliaDistributori.H3 = "Tipo pratica";
            GrigliaDistributori.H4 = "Pratiche da inviare";
            GrigliaDistributori.DataSource = common.ToGenericListTransformers.transform(data_inv_risp);
            GrigliaDistributori.Visible = true;
            if (GrigliaPratiche.Visible)
            {
                GrigliaPratiche.NumColonne = 5;
                GrigliaPratiche.H0 = "Pratica ASM";
                GrigliaPratiche.H1 = "Pratica Utente";
                GrigliaPratiche.H2 = "POD";
                GrigliaPratiche.H3 = "Distributore";
                GrigliaPratiche.DataSource = common.ToGenericListTransformers.transformInvio(_ListaPratiche);
            }
            GrigliaDistributori.ViewInviati = hfInviati.Value == "true";
        }

        // **
        // Questa procedura provvede a caricare le pratiche e popolare il dataset dei mittenti
        // in modo da poter selezionare le pratiche di cui si intende inviare le risposte.
        // **
        private void CaricaListaPratiche()
        {
            DS_snd_risposte.TBL_SND_risposteRow dr_ris;
            String cKey;

            data_inv_risp = new DS_snd_risposte();

            List<GEP_TESTATA> searchResult = Services.AnagraficheService.ricercaPraticheByStato(STATO_chiusa);
            foreach (GEP_TESTATA dr_gep in searchResult)
            {
                if (Services.AnagraficheService.getListaVenditori().ContainsKey(dr_gep.Tes_Cod_Contr_Disp))
                {
                    cKey =string.Concat(dr_gep.Tes_Cod_Contr_Disp, dr_gep.Tes_Cod_Servizio);
                    dr_ris = data_inv_risp.TBL_SND_risposte.FindByRIS_key(cKey);
                    if (dr_ris == null)
                    {
                        dr_ris = (DS_snd_risposte.TBL_SND_risposteRow)data_inv_risp.TBL_SND_risposte.NewRow();
                        dr_ris.RIS_key = cKey;
                        if (dr_gep.Tes_Piva_Utente != null)
                        {
                            dr_ris.RIS_piva_mitt = dr_gep.Tes_Piva_Utente;    //dr_gep.Tes_Piva_Utente;
                        }
                        else
                        {
                            dr_ris.RIS_piva_mitt = "";
                        }
                        dr_ris.RIS_cod_disp = dr_gep.Tes_Cod_Contr_Disp;
                        dr_ris.RIS_tipo_prat = dr_gep.Tes_Cod_Servizio;
                        dr_ris.RIS_nome = Services.AnagraficheService.getListaVenditori()[dr_gep.Tes_Cod_Contr_Disp].Ven_ragsoc;
                        data_inv_risp.TBL_SND_risposte.Rows.Add(dr_ris);
                    }
                    dr_ris.RIS_numero_pratiche += 1;
                }
            }
        }

        protected void GrigliaDistributori_OnSelect(string commandName, GenericListDTO row)
        {
            DS_snd_risposte.TBL_SND_risposteRow dr_inr;

            dr_inr = data_inv_risp.TBL_SND_risposte.FindByRIS_key(row.Id);
            try
            {
                //List<GEP_TESTATA> searchResult = Services.AnagraficheService.ricercaPratiche(ddlTipoPratica.SelectedValue, "DP1616" ddlFornitore.SelectedValue, txtPiva.Text, txtRagsoc.Text, txtDa.Text, txtA.Text);
                _ListaPratiche = Services.AnagraficheService.ricercaPratiche(dr_inr.RIS_tipo_prat, dr_inr.RIS_cod_disp, "", "", "", "", "", "", "", "", STATO_chiusa, -1,"","","");
                Session["ListaPratiche"] = _ListaPratiche;
                PannelloPratiche.Visible = true;
            }
            catch (ManagedException e0x)
            {
                ((BasePage)this.Page).info.AddMessage(e0x);
            }
        }

        protected void GrigliaDistributori_OnDownload(GenericListDTO row)
        {
            System.IO.StreamWriter sw;
            System.IO.FileStream sr;
            GEP_RISPOSTA dr_resp;
            string cFileName;
            string cLine;
            DS_snd_risposte.TBL_SND_risposteRow dr_inr;

            try
            {
dr_inr = data_inv_risp.TBL_SND_risposte.FindByRIS_key(row.Id);

            _ListaPratiche = Services.AnagraficheService.ricercaPratiche(dr_inr.RIS_tipo_prat, dr_inr.RIS_cod_disp, "", "", "", "", "", "", "", "", STATO_chiusa, -1,"","","");
            cFileName = String.Concat(Server.MapPath("~/App_Data"), "/", DateTime.Now.ToString("yyyyMMddHHmmss"), "_risposte_pratiche_chiuse.csv");
            sw = new System.IO.StreamWriter(cFileName);

            // **
            // Scrittura prima riga, riga di intestazione
            // **
            dr_resp = Services.PraticaBaseService.getPraticaResponse(((GEP_TESTATA)_ListaPratiche[0]).Id_tes_cod_pratica);

            cLine = "";
            foreach (System.Xml.XmlNode xnItem in dr_resp.Response.ChildNodes[0].ChildNodes)
            {
                cLine = string.Concat(cLine, ";", xnItem.Name);
            }
            sw.WriteLine(cLine.Substring(1));
            foreach (GEP_TESTATA dr_tes2 in _ListaPratiche)
            {
                dr_resp = Services.PraticaBaseService.getPraticaResponse(dr_tes2.Id_tes_cod_pratica);
                cLine = "";
                foreach (System.Xml.XmlNode xnItem in dr_resp.Response.ChildNodes[0].ChildNodes)
                {
                    cLine = string.Concat(cLine, ";", xnItem.InnerText);
                }
                sw.WriteLine(cLine.Substring(1));
            }
            sw.Close();

            sr = System.IO.File.Open(cFileName, System.IO.FileMode.Open);
            Byte[] btFile;
            btFile = new Byte[Convert.ToInt32(sr.Length)];
            sr.Read(btFile, 0, Convert.ToInt32(sr.Length));
            sr.Close();
            
            this.Response.Clear();
            this.Response.ContentType = "text/plain";
            this.Response.AppendHeader("Content-Disposition", "attachment; filename=" + System.IO.Path.GetFileName(cFileName));
            this.Response.BinaryWrite(btFile);
            this.Response.End();
               hfInviati.Value = "true";
            }
            catch (Exception ex)
            {
                hfInviati.Value = "false";
            }
        }

        protected void GrigliaPratiche_OnSelect(string commandName, GenericListDTO row)
        {
            GrigliaDistributori.Clear();
            common.TempSession.setBag("CODICE_PRATICA", row.Id.Split('/')[0]);
            Response.Redirect("~/pages/Pratica.aspx");
        }

        protected void GrigliaDistributori_OnInviati(GenericListDTO row)
        {
            DS_snd_risposte.TBL_SND_risposteRow dr_inr;

            dr_inr = data_inv_risp.TBL_SND_risposte.FindByRIS_key(row.Id);
            _ListaPratiche = Services.AnagraficheService.ricercaPratiche(dr_inr.RIS_tipo_prat, dr_inr.RIS_cod_disp, "", "", "", "", "", "", "", "", STATO_chiusa, -1,"","","");
            foreach (GEP_TESTATA testata in _ListaPratiche)
            {
                testata.Tes_Stato = 25;
                Services.PraticaBaseService.UpdateStatoPratica(testata);
            }
        }
    }
}